#include "ResourcePool.h"
#include "App/Utils/ResourceManager/ResourceManager.h"

static ResourceManager Font_;
static ResourceManager Image_;

extern "C"
{
#define IMPORT_FONT(name)                               \
    do                                                  \
    {                                                   \
        LV_FONT_DECLARE(font_##name)                    \
        Font_.AddResource(#name, (void *)&font_##name); \
    } while (0)

#define IMPORT_IMG(name)                                    \
    do                                                      \
    {                                                       \
        LV_IMG_DECLARE(img_src_##name)                      \
        Image_.AddResource(#name, (void *)&img_src_##name); \
    } while (0)

    static void Resource_Init()
    {
        void copyFontFromSD2SPIRAM(void);
        copyFontFromSD2SPIRAM();

        /* Import Fonts */
        IMPORT_FONT(bahnschrift_13);
        IMPORT_FONT(bahnschrift_17);
        IMPORT_FONT(bahnschrift_32);
        IMPORT_FONT(bahnschrift_65);
        IMPORT_FONT(agencyb_36);
        IMPORT_FONT(smiley_36);
        IMPORT_FONT(smileysd_16);
        IMPORT_FONT(compass_24);

        /* Import Images */
        IMPORT_IMG(alarm);
        IMPORT_IMG(battery);
        IMPORT_IMG(battery_info);
        IMPORT_IMG(bicycle);
        IMPORT_IMG(compass);
        IMPORT_IMG(gps_arrow_default);
        IMPORT_IMG(gps_arrow_dark);
        IMPORT_IMG(gps_arrow_light);
        IMPORT_IMG(gyroscope);
        IMPORT_IMG(locate);
        IMPORT_IMG(map_location);
        IMPORT_IMG(menu);
        IMPORT_IMG(origin_point);
        IMPORT_IMG(pause);
        IMPORT_IMG(satellite);
        IMPORT_IMG(sd_card);
        IMPORT_IMG(start);
        IMPORT_IMG(stop);
        IMPORT_IMG(storage);
        IMPORT_IMG(system_info);
        IMPORT_IMG(time_info);
        IMPORT_IMG(trip);
        IMPORT_IMG(popcat_close);
        IMPORT_IMG(popcat_open);
        IMPORT_IMG(compass_bg);
    }

} /* extern "C" */

void ResourcePool::Init()
{
    Resource_Init();
    Font_.SetDefault((void *)LV_FONT_DEFAULT);
}

lv_font_t *ResourcePool::GetFont(const char *name)
{
    return (lv_font_t *)Font_.GetResource(name);
}
const void *ResourcePool::GetImage(const char *name)
{
    return Image_.GetResource(name);
}
